#pragma once

#include "Mapa.h"
#include "EventListener.h"
#include "Path.h"
#include "Node.h"


#include <list>


using namespace std;

namespace PathFinding{
	enum estadoPath{
		NONE,
		PROCESANDO,
		LISTO,
		IMPOSIBLE
		};
	}




class PathFinder
	{
	private:
		PathFinding::estadoPath estado;		
		posicionTile tileInicio;
		posicionTile tileDestino;
		Mapa *mapa;

		
		list<Node*> listaCerrada;

		Path *ruta;
		bool *listaCerradaBools;

		int steps;
		int totalSteps;
		int maxSteps;

		list<Node*> openList;
		
		Node *nodo;

	public:
		PathFinder(int xInicio, int yInicio, int xDestino, int yDestino,Mapa *m);
		void procesar(int loops);		
		PathFinding::estadoPath getStatus(){return estado;}
		int getTotalSteps(){return totalSteps;}
		Path* getPath(){return ruta;}
		~PathFinder(void);
	private:
		Node* mejorNodo();
		Node* buscarNodo(int x, int y);
		void step();//
		void finalizar();
	};
